import cookies from './util.cookies'
import { getConfig } from '@/settings'

export default {
    /**
     * 验证令牌是否有效
     * @returns effectiveTime 有效时间（毫秒）时间小于等于 0 时令牌无效
     */
    validate() {
        // 13位 毫秒级时间戳 eg:1572235626656
        const now = Date.now()
        let effectiveTime = 0
        const token = cookies.get(getConfig().auth.TOKEN) || ''
        // eg:1572241134763
        const expiresIn =
            parseInt(cookies.get(getConfig().auth.EXPIRES_IN)) || 0

        // 令牌有效时判断令牌有效时间
        if (token) {
            effectiveTime = expiresIn - now
        }

        return effectiveTime
    },
    /**
     * @description 清空认证相关信息
     */
    clear() {
        cookies.remove(getConfig().auth.TOKEN)
        cookies.remove(getConfig().auth.UUID)
        cookies.remove(getConfig().auth.EXPIRES_IN)
        cookies.remove(getConfig().auth.REFRESH_TOKEN)
    },
    /**
     * @description 存储认证信息
     * @param {Object} payload 认证信息
     */
    storeAuthInfo({ access_token, expires_in, refresh_token }) {
        expires_in = Date.now() + Number(expires_in) * 1000
        cookies.set(getConfig().auth.TOKEN, access_token)
        cookies.set(getConfig().auth.EXPIRES_IN, expires_in)
        cookies.set(getConfig().auth.REFRESH_TOKEN, refresh_token)
    },
    /**
     * 获取访问令牌
     * @returns 当前用户的访问令牌
     */
    getAccessToken() {
        return cookies.get(getConfig().auth.TOKEN)
    },
    /**
     * @description 重定向到主页（认证成功后调用）
     * @param {Object} vm Vue 组件实例
     */
    redirectToHome(vm) {
        const path = cookies.get('redirect') || '/dashboard' // 获取 cookie 里的重定向的地址
        cookies.remove('redirect') // 删除 cookie 中保存的重定向页面
        // path 以 http或https 开头时视为外链（有这种可能吗？）
        if (path.indexOf('https') === 0 || path.indexOf('http') === 0) {
            // 外链地址
            window.location.replace(path)
        } else {
            // 根据是否存有重定向页面判断如何重定向
            vm.$router.replace({ path })
        }
    },
    /**
     * @description 重定向到认证页面
     * @param {Object} route Vue 路由实例
     */
    // eslint-disable-next-line no-unused-vars
    redirectToAuth(route) {
        // let url = urlUtils.combine(urlUtils.getUrlPrefix(), route.path);
        window.location.reload()
    },
}
